#ifndef MODAL_FILTER_H
#define MODAL_FILTER_H

#include "Envelope.h"

class ModalFilterSystem;

class ModalFilter
{
public:
	virtual float Process(int sampleNum, float energy, ModalFilterSystem* system) = 0;
};

class SinSweepFilter : public ModalFilter
{
public:
	SinSweepFilter(float startFreq, float endFreq, float maxDuration);
	float Process(int sampleNum, float energy, ModalFilterSystem* system);

private:
	float m_startFreq;
	float m_endFreq;
	float m_freqIncrement;
	int m_numSamples;
};

class DecayingSinFilter : public ModalFilter
{
public:
	DecayingSinFilter(float frequency, float maxDuration);
	float Process(int sampleNum, float energy, ModalFilterSystem* system);

private:
	float m_frequency;
	int m_numSamples;
};

#endif